home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swags_z.zip
/
STRINGS.SWG
/
0091_Flipping a String.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-08-24
|
2KB
|
81 lines
Procedure ReverseString(var s:string);
var i,j:byte; c:char;
begin
j:=Length(s);
for i:=1 to j div 2 do
begin
c:=s[i];
s[i]:=s[j];
s[j]:=c;
dec(j);
end;
end;
{ ---- BASM 'pointer oriented' version ------------------------------ }
Procedure ReverseAString(var s:string); assembler;
asm
lds SI,s
mov AL,[SI]
xor AH,AH
mov DI,SI
inc SI { SI points to start of s }
add DI,AX { DI points to end of s }
@@0: cmp SI,DI { while SI=DI do ... }
jae @@1
mov AL,[SI]
mov AH,[DI]
mov [SI],AH
mov [DI],AL
inc SI
dec DI
jmp @@0
@@1:
end;
{ Version #2 }
Procedure ReverseAString(var s:string); assembler;
asm
push DS
cld
lds SI,s
mov DI,SI
lodsb
xor AH,AH
add DI,AX { DI points to end of s }
@ReverseLoop: cmp SI,DI { while SI=DI do ... }
jae @ReverseExit
mov AL,[SI]
mov AH,[DI]
mov [SI],AH
mov [DI],AL
inc SI
dec DI
jmp @ReverseLoop
@ReverseExit: pop DS
end;
Function FlipStr(s:string):string; assembler;
asm
push DS
cld
les DI,@Result
lds SI,s
lodsb
stosb
mov CL,AL
xor CH,CH
add DI,CX
@FlipLoop: and CL,CL
jz @FlipExit
lodsb
dec DI
mov ES:[DI],AL
dec CL
jmp @FlipLoop
@FlipExit: pop DS
end;